// 写一个泛型类，求数组中的最大值

class People implements Comparable<People>{
    @Override
    public int compareTo(People o) {
        return 0;
    }
}




//T 一定是引用 类型 ，最终被擦除成了 Object 类型的, 而Object 类中没有可以比较大小的方法
//此处写成 T extends Comparable<T> ： 表明 T 实现了 comparable 接口
class find<T extends Comparable<T>>{
    public T findMax(T[] array){
        T max= array[0];
        for (int i = 0; i < array.length; i++) {
            // 此处 array[i] 与 max 不能进行比较：
            if(max.compareTo(array[i]) <0 ){
                max=array[i];
            }
        }
        return max;
    }
}

// 写一个泛型方法
class find2{
    // 泛型方法的书写跟泛型类差不多，
    public<T extends Comparable<T>> T findMax(T[] array){
        T max= array[0];
        for (int i = 0; i < array.length; i++) {
            // 此处 array[i] 与 max 不能进行比较：
            if(max.compareTo(array[i]) <0 ){
                max=array[i];
            }
        }
        return max;
    }
}

public class Test3 {
    public static void main(String[] args) {
        find<Integer> array=new find<>();

        find2 array2=new find2();

        Integer[] integers={1,2,3,5,4,6,7};
        System.out.println(array.findMax(integers));

        // 类型推导 ，根据实参传值 来推导此时的类型； ret 实际上是 ret2 书写的形式
        Integer ret=array2.findMax(integers);
        Integer ret2=array2.<Integer>findMax(integers);
        System.out.println(ret);
    }



    public static void main01(String[] args) {
        find<Integer> a=new find<>();
        find<String> b=new find<>();

        // 此处会报错：因为 People 并没有实现 comparable 接口: 当上面People实现接口之后就可以正常运行
        find<People> c=new find<>();
    }
}
